/**************************************************************************************
*
*	Copyright (C) 2010 - 2012 Brent Andrew O. Chua - See LICENSE.txt for more info.
*		
*	Filename	-	VertexElementInfo.h
*
*	Description -	Wrapper class to wrap all info of vertex element into one.
*
*	Comments	-
*
*	Modification History:
*			Name			   Date					Description
*			MrCodeSushi	-	09/21/2012	-	Creation of this file
**************************************************************************************/
#ifndef _PSX_GEOMETRY_ELEMENT_INFO
#define _PSX_GEOMETRY_ELEMENT_INFO

#include "PulseSTD.h"
#include "GraphicsTypes.h"
#include "VertexElementTypes.h"
#include "VertexElementSizes.h"
#include "GeometryElementRequirement.h"
#include "XMLParser.h"

namespace Pulse
{
	class GeometryElementInfo
	{
	public:

		static SIZE_T GetVertexSize( EVertexElement::Type type );

		static const CHAR * GetVertexStreamName( void ){ return PSX_String("VertexStream"); }

		static const CHAR * GetVertexName( EVertexElement::Type type );

		static EVertexElement::Type GetVertexType( const CHAR *pName );

		static EVertexElement::Type GetVertexType( const String *pName );

		static const CHAR * GetVertexSemanticName( EVertexElement::Type type );

		static EGraphicsFormat::Type GetVertexGraphicsFormat( EVertexElement::Type type );

		static const CHAR * GetIndexStreamName( void ) { return PSX_String("IndexStream"); }

		static const CHAR * GetIndexName( void ) { return PSX_String("Index"); }

		static const CHAR * GetSubGeometryStreamName( void ) { return PSX_String("SubGeometryStream"); }
		
		static const CHAR * GetSubGeometryName( void ) { return PSX_String("SubGeometry"); }
		
		static EErrorCode::Type GetRequirementElement( XMLElementPtr pElem, GeometryElementRequirement *pRequirement );
		//static SIZE_T32 GetNumTypeElement

	private:

	};
}

#endif /* _PSX_GEOMETRY_ELEMENT_INFO */